package app

/*
为什么我们不用现有的go-zero、kratos而是要自己开发一个框架
1. go语言还没有像java的spring一样由一个大一统的框架，生态越来越成熟，目前来说到底哪个框架最终能发展成spring一样的
2. 这个时候我们的系统以来了kratos或者q0-zero，在公司内可能会面临不同的开发人员选择不同的框架
3. 我们使用了kratos就会受到kratos的限制，gorm，监控等大量的组件， kratos如果提供了这些了功能，go-zero
4. kratos这些框架可能无法提供一些特殊的功能
5. 我们可以使用kratos但是不能丧失自己搭建底层框架的能力
6. 熟悉底层各个细节的最好方式是自己搭建底层框架，然后使用自己的框架，我希望把日志打印到jaeger
自定义需求
7. 很多同学使用kratos的时候，不去理解细节不懂得看源码，逐渐就成为了crud boy
基于上述这些我们决定自己搭建一套微服务框架 gin grpc
*/

/*
微服务框架：
	抽取出公共的服务，可以让我们快速的启动项目，当我们需要某些功能的时候通过配置文件或者具体的实现接口
	微服务框架抽取出来的是业务无关的功能，很难做到和具体业务相关

	微服务的技术选型:
	http - gin
	rpc - gRPC

	我的微服务启动的时候应该做什么:
	1. 处理rpc服务的启动
		组件
	2．处理web服务的启动
		组件
		recovery拦截器
	3．如果我们希望我们的系统可以被监控- pprof接口
	4. 自动启动metrics 的接口
	5．可以自动注册health接口(gRPC,http)
	6. app最好不要和gin以及grpc强绑定
	7．完成自动服务注册(可选)
	8．出来优雅退出
	9．启动过程中的日志打印
	10. go-zero中处理的信号–某些信号产生后在退出前会写入当前的进行的信息(信号量应该由使用者确定)简单的启动服务的时候有很多细节需要考虑，比如:

*/
